package com.rayframework.context.stereotype;

import com.rayframework.beans.factory.annotation.RayAutowired;

import java.lang.annotation.*;

/**
 * 用于标识一个类作为 Ray 容器中的组件 Bean
 * 使用 {@link RayComponent} 注解标记一个类时，Ray 会自动扫描并将该类实例化为一个Bean对象
 * 然后可以在其他类中通过依赖注入{@link RayAutowired}的方式使用这个Bean
 *
 * 为了摆脱通过classpath扫描根据xml方式定义的bean的方式
 * 抛出异常NoUniqueBeanDefinitionException，用@RayQualifier注解指定
 *
 * @author LiaoYuXing-Ray
 * @version 1.0
 * @createDate 2023/11/25 16:04
 **/
@Target({ElementType.TYPE}) // 该注解可以应用于类、接口（包括注解类型）或enum声明
@Retention(RetentionPolicy.RUNTIME) // 指定该注解在运行时仍然有效
@Documented // 表示该注解将被包含在JavaDoc文档中
@Indexed
public @interface RayComponent {

    /**
     * The value may indicate a suggestion for a logical component name,
     * to be turned into a Spring bean in case of an autodetected component.
     * @return the suggested component name, if any (or empty String otherwise)
     */
    String value() default "";

}
